package com.yupi.yupicturebackend.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.yupi.yupicturebackend.model.dto.ai.AIGenerationConfig;
import com.yupi.yupicturebackend.model.dto.ai.AIGenerationResult;
import com.yupi.yupicturebackend.model.entity.AIGenerationTask;

import java.util.List;
import java.util.Map;

/**
 * AI图片生成任务服务
 *
 * @author yupi
 */
public interface AIGenerationTaskService extends IService<AIGenerationTask> {

    /**
     * 创建AI图片生成任务
     *
     * @param prompt 提示词
     * @param config 生成配置
     * @param userId 用户ID
     * @return 任务ID
     */
    String createGenerationTask(String prompt, AIGenerationConfig config, Long userId);

    /**
     * 执行AI图片生成
     *
     * @param taskId 任务ID
     * @return 生成结果
     */
    AIGenerationResult executeGeneration(String taskId);

    /**
     * 更新任务状态
     *
     * @param taskId 任务ID
     * @param status 新状态
     * @param result 生成结果
     * @return 是否成功
     */
    boolean updateTaskStatus(String taskId, String status, AIGenerationResult result);

    /**
     * 获取用户生成任务列表
     *
     * @param userId 用户ID
     * @param limit 限制数量
     * @return 任务列表
     */
    List<AIGenerationTask> getUserTasks(Long userId, Integer limit);

    /**
     * 获取待处理任务
     *
     * @param limit 限制数量
     * @return 待处理任务列表
     */
    List<AIGenerationTask> getPendingTasks(Integer limit);

    /**
     * 统计用户生成数据
     *
     * @param userId 用户ID
     * @return 统计数据
     */
    Map<String, Object> getUserStatistics(Long userId);

    /**
     * 获取热门提示词
     *
     * @param limit 限制数量
     * @return 热门提示词列表
     */
    List<Map<String, Object>> getPopularPrompts(Integer limit);

    /**
     * 获取推荐配置
     *
     * @param userId 用户ID
     * @return 推荐配置
     */
    AIGenerationConfig getRecommendedConfig(Long userId);

    /**
     * 批量生成图片
     *
     * @param prompts 提示词列表
     * @param config 生成配置
     * @param userId 用户ID
     * @return 任务ID列表
     */
    List<String> batchGenerate(List<String> prompts, AIGenerationConfig config, Long userId);

    /**
     * 取消生成任务
     *
     * @param taskId 任务ID
     * @param userId 用户ID
     * @return 是否成功
     */
    boolean cancelTask(String taskId, Long userId);

    /**
     * 重新生成
     *
     * @param taskId 原任务ID
     * @param userId 用户ID
     * @return 新任务ID
     */
    String regenerate(String taskId, Long userId);

    /**
     * 获取生成历史
     *
     * @param userId 用户ID
     * @param page 页码
     * @param size 页大小
     * @return 历史记录
     */
    Map<String, Object> getGenerationHistory(Long userId, Integer page, Integer size);

    /**
     * 导出生成结果
     *
     * @param taskIds 任务ID列表
     * @param userId 用户ID
     * @param format 导出格式
     * @return 导出文件URL
     */
    String exportResults(List<String> taskIds, Long userId, String format);
}
